'''GIS 数据的可视化通常使用Pyecharts库。'''

###################################################################################
#导入需要的包
import json
from pyecharts.charts import Map
from pyecharts import options as opts
import pandas as pd
# 数据集路径
file_path = r"美国的百日咳地区患病人数.csv"
# 提取州名和患病人数
data_pairs = data[["State", "Cases"]].values.tolist()
print(data_pairs)  # 示例输出：[["California", 100], ["Texas", 80], ...]
# GeoJSON 文件路径
geojson_path = r"USA.json"
# 加载 GeoJSON 数据
with open(geojson_path, "r", encoding="utf-8") as f:
    usa_geojson = json.load(f)
# 创建 Map 图
map_chart = (Map(init_opts=opts.InitOpts(width="1200px", height="600px", bg_color="#EEEEE8"))
    .add(
        series_name="患病情况",
        data_pair=data_pairs,
        maptype="美国",  # 使用注册的地图名称
        is_map_symbol_show=False
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="美国百日咳患病情况分布"),
        visualmap_opts=opts.VisualMapOpts(
        max_=300,
        min_=0,
            is_piecewise=True,
            pieces=[
                {"min": 0, "max": 50, "label": "低风险", "color": "#7CC5FF"},
                {"min": 51, "max": 100, "label": "中风险", "color": "#FFD700"},
                {"min": 101, "label": "高风险", "color": "#FF4500"}
            ]
        )
    )
)
# 渲染地图
map_chart.render(r"us_disease_map.html")
###################################################################################

'''在该方法中使用了 Pyecharts 的 Map 组件来创建一个地图，并添加了数据和一些全局配置。Map 是 Pyecharts 中用于绘制地图的组件。它支持绘制国家、省份、城市等不同级别的地图。
init_opts是Pyecharts 中用于设置图表初始化选项的参数。它通过 opts.InitOpts 类来配置图表的宽度、高度、背景颜色等属性。'''
###################################################################################
Map(init_opts=opts.InitOpts(width="1200px", height="600px", bg_color="#FFFFFF"))
###################################################################################

'''add() 方法用于向地图中添加数据系列。它接受以下参数：series_name：数据系列的名称，用于在图例中显示。data_pair：数据对，格式为 [(地区名称, 数据值), ...]。maptype：地图类型，例如 "美国"。is_map_symbol_show：是否显示地图上的标记符号。'''
###################################################################################
.add(
    series_name="患病情况",
    data_pair=data_pairs,
    maptype="美国",
    is_map_symbol_show=False
)
###################################################################################

'''set_global_opts() 方法用于设置全局配置项，例如标题、视觉映射等。它接受以下参数：title_opts：标题配置，通过 opts.TitleOpts 类设置。visualmap_opts：视觉映射配置，通过 opts.VisualMapOpts 类设置。
其中opts.TitleOpts 类:opts.TitleOpts 用于配置标题的样式和内容。它接受以下参数：title：主标题文本。subtitle：副标题文本（可选）。pos_left：标题的水平位置（可选）。pos_top：标题的垂直位置（可选）。'''
###################################################################################
opts.TitleOpts(title="美国百日咳患病情况分布")
###################################################################################


'''opts.VisualMapOpts 类:opts.VisualMapOpts 用于配置视觉映射（颜色映射）的样式和范围。它接受以下参数：max_：数据的最大值。min_：数据的最小值。is_piecewise：是否分段显示。
pieces：分段的配置，格式为 [{"min": ..., "max": ..., "label": ..., "color": ...}, ...]。'''
###################################################################################
opts.VisualMapOpts(
    max_=300,
    min_=0,
    is_piecewise=True,
    pieces=[
        {"min": 0, "max": 50, "label": "低风险", "color": "#7CC5FF"},
        {"min": 51, "max": 100, "label": "中风险", "color": "#FFD700"},
        {"min": 101, "label": "高风险", "color": "#FF4500"}
    ]
)
###################################################################################


'''render() 方法：render() 方法用于将图表渲染为 HTML 文件。它接受一个文件路径作为参数，将生成的图表保存为 HTML 文件。'''
###################################################################################
# 渲染地图
map_chart.render(r"us_disease_map.html")
###################################################################################